﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Collections;
using Distrackting.DataLayer;
using Distrackting.PresentationLayer;
using Distrackting.BusinessLayer;
using System.Linq.Expressions;

namespace Distrackting.BusinessLayer
{
    public static  class GerirUtilizadores
    {
        public static void setNome(Guid cod_user, String nome)
        {
            try
            {
                BDUtilizadores.setNome(cod_user, nome);
            }
            catch (Exception) { throw new Exception("Não foi possível inserir o nome de utilizador."); }
        }

        public static void setSexo(Guid cod_user, char s)
        {
            try
            {
                BDUtilizadores.setSexo(cod_user, s);
            }
            catch (Exception) { throw new Exception("Não foi possível inserir o sexo do utilizador."); }
        }

        public static  void setTelemovel(Guid cod_user, String num)
        {
            try
            {
                setTelemovel(cod_user, num);
            }
            catch (Exception )
            {
                throw new Exception("Não foi possível inserir o numero de telemovel do utilizador.");
            }
        }

        public static  void setEmail(Guid cod_user, String email)
        {
            try
            {
                setEmail(cod_user, email);
            }
            catch (Exception )
            {
                throw new Exception("Não foi possível inserir o e-mail do utilizador.");
            }
        }

        public static  void setLocalidade(Guid cod_user, Guid localidade)
        {
            try
            {
                setLocalidade(cod_user, localidade);
            }
            catch (Exception )
            {
                throw new Exception("Não foi possível inserir a localidade do utilizador.");
            }
        }

        public static  void despromoverUtilizador(Guid cod_user, Guid nivel)
        {
            try
            {
                despromoverUtilizador(cod_user, nivel);
            }
            catch (Exception )
            {
                throw new Exception("Não foi possível despromover o utilizador.");
            }
        }

        public static  void promoverUtilizador(Guid cod_user, Guid nivel)
        {
            try
            {
                promoverUtilizador(cod_user, nivel);
            }
            catch (Exception )
            {
                throw new Exception("Não foi possível promover o utilizador.");
            }
        }

        public static  IQueryable<Utilizador> getListaUtilizadores()
        {
            try
            {
                return BDUtilizadores.getListaUtilizadores();
            }
            catch (Exception)
            {
                throw new Exception("Não foi possível aceder a lista de utilizadores.");
            }

        }

        public static  void removeUtilizador(Guid cod_user)
        {
            try
            {
                BDUtilizadores.removeUtilizador(cod_user);
            }
            catch (Exception )
            {
                throw new Exception("Não foi possível remover o utilizador.");
            }
        }

        public static  bool validaEmail(String email)
        {
            try
            {
                return validaEmail(email);
            }
            catch (Exception )
            {
                throw new Exception("Não foi possível validar o e-mail do utilizador.");
            }
        }

        public static  void criaUtilizador(String email, String pass)
        {
            try
            {
                criaUtilizador(email, pass);
            }
            catch (Exception )
            {
                throw new Exception("Não foi possível adicionar utilizador.");
            }

        }

        public static void setDataNascimento(Guid cod_user, DateTime data)
        {
            try
            {
                setDataNascimento(cod_user, data);
            }
            catch (Exception)
            {
                throw new Exception("Não foi possível inserir a data de nascimento do utilizador.");
            }
        }

        public static Utilizador getUtilizador(String email)
        {
            try
            {
                Expression<Func<Utilizador, bool>> whereClause = (Utilizador u) => u.email == email;
                return dataUtilizador.getUtilizadores(whereClause).FirstOrDefault();
            }
            catch (Exception e)
            {
                Mensagens.AdicionarDebug(e.Message);
                throw new Exception("Não foi possível aceder ao utilizador.");

            }

        }

        public static Utilizador getUtilizador(Guid user_guid)
        {
            try
            {
                Expression<Func<Utilizador, bool>> whereClause = (Utilizador u) => u.cod_utilizador == user_guid;
                return dataUtilizador.getUtilizadores(whereClause).FirstOrDefault();
            }
            catch (Exception e)
            {
                Mensagens.AdicionarDebug(e.Message);
                throw new Exception("Não foi possível remover percurso.");

            }

        }

        public static Boolean changeUtilizador(Utilizador u)
        {
            try
            {
                return dataUtilizador.changeUtilizador(u);
            }
            catch (Exception e)
            {
                Mensagens.AdicionarDebug(e.Message);
                throw new Exception("Não foi possível mudar de utilizador.");
            }

        }


    }

}
